Multi-processor systems, like servers, for example, service a variety of input/output (IO) devices generally over a system bus. These IO devices use interrupts, for the most part, to signal the system that they have data for processing thereby. Typically, the system identifies the IO devices connected thereto and assigns each IO device interrupt a priority number and processing unit which may be performed arbitrarily. Each processing unit of the system will service the interrupts assigned thereto using its interrupt architecture and operating system interrupt handler according to the assigned priority numbers thereof.
Current interrupt allocation and assignment for the multi-processor systems has been Wound to be inherently unfair. Typically, interrupt vectors, which are used to prioritize interrupt handling of the IO devices, are assigned according to a first come, first serve basis. This means that the first IO devices identified in the system are assigned the lowest interrupt priority vectors in their service priority level (SPL) class. Accordingly, if a processing unit of the system has many busy IO devices assigned to it, interrupt processing by the unit of one IO device interrupt may delay processing of interrupts of the other assigned IO devices which may lead to some IO device interrupts “hogging” the resources of the processing unit.
For example, in the Intel® Itanium® Processor Family, each processor unit provides the highest pending interrupt, one at a time. This may lead to IO devices, which may have lower priority vectors, waiting for long periods of time for their associated interrupts to be serviced causing IO device resets and timeouts, for example. One solution is offered in the above-referenced co-pending patent application Ser. No. 10/950,994, now U.S. Pat. No. 7,149,831. In this solution, a batch of pending interrupts are read into a working list and serviced in an interrupt priority order. During batch processing, incoming interrupt vectors having the same or lower priority levels than those on the list will not be serviced. However, if an interrupt having a priority level higher than the interrupts in the working list is received during batch processing, it will be serviced preemptively. So, the solution offers a fairness to interrupts in the working list over incoming interrupts having the same or lower priority level.